<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Misaka Flows 工作流引擎使用文档</title>
    <style>
        body {
            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
            line-height: 1.6;
            max-width: 1000px;
            margin: 0 auto;
            padding: 20px;
            color: #333;
        }
        pre {
            background-color: #f5f5f5;
            padding: 15px;
            border-radius: 5px;
            overflow-x: auto;
        }
        code {
            font-family: 'Courier New', Courier, monospace;
        }
        h1, h2, h3 {
            color: #2c3e50;
        }
        .note {
            background-color: #fff3cd;
            border-left: 4px solid #ffc107;
            padding: 15px;
            margin: 15px 0;
        }
    </style>
</head>
<body>
    <h1>Misaka Flows 工作流引擎使用文档</h1>
    
    <h2>1. 简介</h2>
    <p>Misaka Flows 是一个轻量级的工作流引擎，用于处理业务流程自动化。它支持多种节点类型，包括开始节点、结束节点、任务节点和条件节点。</p>

    <h2>2. 核心概念</h2>
    <ul>
        <li><strong>工作流（Workflow）</strong>：完整的流程定义</li>
        <li><strong>节点（WorkflowNode）</strong>：流程中的处理单元</li>
        <li><strong>实例（WorkflowInstance）</strong>：运行中的工作流</li>
    </ul>

    <h2>3. 节点类型</h2>
    <ul>
        <li>开始节点（start）：工作流的起点</li>
        <li>结束节点（end）：工作流的终点</li>
        <li>任务节点（task）：需要处理的具体任务</li>
        <li>条件节点（condition）：根据条件决定下一步走向</li>
    </ul>

    <h2>4. API 使用示例</h2>
    
    <h3>4.1 创建工作流</h3>
    <pre><code>
# POST /api/workflows/
{
    "name": "请假申请流程",
    "description": "员工请假审批流程"
}
    </code></pre>

    <h3>4.2 创建工作流节点</h3>
    <pre><code>
# 创建开始节点
POST /api/workflow-nodes/
{
    "workflow": 1,
    "name": "开始",
    "node_type": "start"
}

# 创建任务节点
POST /api/workflow-nodes/
{
    "workflow": 1,
    "name": "部门主管审批",
    "node_type": "task"
}
    </code></pre>

    <h3>4.3 启动工作流实例</h3>
    <pre><code>
# POST /api/workflows/{workflow_id}/start_instance/
# 不需要请求体，会自动创建实例并从开始节点开始
    </code></pre>

    <h3>4.4 处理工作流节点</h3>
    <pre><code>
# POST /api/workflow-instances/{instance_id}/process/
{
    "approved": true,
    "comment": "同意请假申请"
}
    </code></pre>

    <h2>5. Python 代码示例</h2>
    <pre><code>
from misaka.flows.services import WorkflowEngine
from misaka.flows.models import Workflow, WorkflowNode

# 创建工作流
workflow = Workflow.objects.create(
    name="请假申请",
    description="员工请假审批流程"
)

# 创建节点
start_node = WorkflowNode.objects.create(
    workflow=workflow,
    name="开始",
    node_type="start"
)

approve_node = WorkflowNode.objects.create(
    workflow=workflow,
    name="主管审批",
    node_type="task"
)

end_node = WorkflowNode.objects.create(
    workflow=workflow,
    name="结束",
    node_type="end"
)

# 设置节点流转
start_node.next_nodes.add(approve_node)
approve_node.next_nodes.add(end_node)

# 启动工作流实例
instance = WorkflowEngine.create_workflow_instance(workflow, user)

# 处理节点
WorkflowEngine.process_node(instance, {"approved": True})
    </code></pre>

    <h2>6. 注意事项</h2>
    <div class="note">
        <ul>
            <li>每个工作流必须包含一个开始节点和至少一个结束节点</li>
            <li>节点之间的连接关系必须正确设置</li>
            <li>条件节点必须提供相应的判断数据</li>
            <li>确保工作流实例的状态正确更新</li>
        </ul>
    </div>

    <h2>7. 工作流状态</h2>
    <ul>
        <li><strong>pending（待处理）</strong>：工作流实例刚创建时的状态</li>
        <li><strong>processing（处理中）</strong>：工作流正在执行中</li>
        <li><strong>completed（已完成）</strong>：工作流成功结束</li>
        <li><strong>terminated（已终止）</strong>：工作流被手动终止</li>
    </ul>

    <h2>8. 扩展建议</h2>
    <ul>
        <li>添加节点处理超时机制</li>
        <li>实现并行处理节点</li>
        <li>添加节点处理权限控制</li>
        <li>实现工作流历史记录</li>
        <li>添加工作流模板功能</li>
    </ul>

    <footer style="margin-top: 50px; border-top: 1px solid #eee; padding-top: 20px;">
        <p>更多信息请参考项目文档或联系技术支持。</p>
    </footer>
</body>
</html> 